package org.example.big_data.anno;

import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import org.example.big_data.validation.StateValidation;


import java.lang.annotation.*;
//自定义注解类，用于校验文章状态
@Documented  //元注解，用于标识这个注解

//@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
//元注解，用于标识这个注解可以用在哪些地方，这里表示可以用在方法、属性、注解、构造器、参数、类型上
@Target({ElementType.FIELD})  //我们这里只需要在属性上使用（FIELD）

@Retention(RetentionPolicy.RUNTIME)  //元注解，用于标识这个注解的生命周期，这里表示在运行时有效

@Constraint(    //元注解，用于标识这个注解的校验类，校验类必须实现ConstraintValidator接口，规定具体的校验规则
        validatedBy = {StateValidation.class}
)

public @interface State {

    String message() default "state参数的值只能是已发布或草稿";
    //自定义注解中的属性message，这里表示校验失败时的提示信息

    Class<?>[] groups() default {};
    //自定义注解中的属性groups，这里表示校验分组，指定这个注解属于哪个分组

    Class<? extends Payload>[] payload() default {};
    //自定义注解中的属性payload，这里表示校验的负载，用于传递额外的信息
}
